﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lesson19_多态_接口
{
    //接口行为的抽象规范
    //接口关键字 interface 
    //语法  
    //修饰符 interface 接口名称 ：继承的接口列表
    //{
    //}

    //一句话记忆：接口是抽象行为的"基类"
    //接口命名规范 帕斯卡前面加I


    //类可以继承一个类，n个接口
    //2:继承了接口后 必须实现其中的内容 而且必须是public的
    interface IFly    // 1：不包含成员变量  2： 只包含方法 属性 索引器 事件
    {                 // 3: 成员不能被实现  4： 成员可以不用访问修饰符，不能是私有的 5:接口不能继承类，但是可以继承另一个接口 
        void Fly();
        string Name { get; set; }   
        int this[int index] { get; set; }  
    }
    #region 接口的使用
    class Animal  //起到基类的作用
    {

    }
    class Person:Animal,IFly
    { 
        public void Fly()
        {

        }
        public string Name { get; set;}

        public int this[int Index]
        {
            get
            {
                return 0;
            }
            set
            {

            }
        }

    }
    #endregion 
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("接口");
            //接口也遵循里氏替换原则
            IFly f = new Person();  //用接口装载子类对象

        }
    }
}
//总结
//继承类：是对象间的继承，包括特征行为噔噔
//继承接口：是行为间的继承，继承接口的行为规范，按照规范去实现内容
//遵循里氏替换原则，装载个中毫无关系但是却有相同行为的对象

//接口可以继承接口，相当于在进行行为合并，待子类继承时去实现具体的行为
//接口可以被显示实现，主要用于实现不同接口中的同名函数的不同表现
//实现接口的方法 可以加 virtual关键字之后子类在重写
